#include<iostream>

using namespace std ;

const int maxn = 100010 ;

int m ;

/**
 * 这里面不设置头结点和尾节点
 */
int e[maxn] , l[maxn] , r[maxn] , idx ;

//初始化
void init() {
    //0表示左端点 ， 1 表示右端点
    r[0] = 1 ;
    l[1] = 0 ;
    idx = 2 ;
    //头结点的右节点是 1
    //尾节点的左节点是 0
    //idx从 2 开始分配
}

//在下标是 k 的点的右边插入 x
void add_to_left(int k , int x) {
    e[idx] = x ;
    l[idx] = k ;
    r[idx] = r[k] ;
    l[r[k]] = idx ;
    r[k] = idx ;
    idx ++ ;
}

//在下标是 k 的点的左边插入 x
void add_to_right(int k , int x) {
    add_to_left(l[k] , x) ;
}

//头插法
void add_to_head(int x) {
    add_to_right(0 , x) ;
}

//尾插法
void add_to_tail(int x) {
    add_to_left(1 , x);
}

//删除
void remove(int k ) {
    r[l[k]] = r[k] ;
    l[r[k]] = l[k] ;
}

int main() {

    cin >> m ;
    while(m--) {
        string op ;
        int k , x ;
        cin >> op ;
        if(op == "L"){
            cin >> x ;
            add_to_head(x) ;
        } else if (op == "R") {
            cin >> x ;
            add_to_tail(x) ;
        } else if (op == "D") {
            cin >> k ;
            remove(k - 2) ;
        } else if (op == "IL") {
            cin >> k >> x ;
            add_to_left(k , x );
        } else if (op == "IR") {
            cin >> k >> x ;
            add_to_right(k , x );
        }
    }

    for(int i = r[0] ; i != 1 ; i = r[i]) {
        printf("%d " , e[i]);
    }
    return 0 ;
}